Buffered Streams এর ধারণা এবং ব্যবহার

Java Technologies - অ্যাপাচি কমন্স আইও (Apache Common IO) File Streams ব্যবস্থাপনা |
175
175

Buffered Streams হল I/O (Input/Output) অপারেশনগুলোর একটি গুরুত্বপূর্ণ অংশ, যা ডেটার প্রবাহ (streaming) কার্যক্রম দ্রুত এবং কার্যকরী করতে ব্যবহৃত হয়। Buffered Streams ব্যবহার করা হয় যখন আপনাকে অনেক পরিমাণ ডেটা একসাথে পড়া বা লেখা দরকার, এবং ডেটার আংশিক অংশের জন্য বারবার ডিস্ক অ্যাক্সেস করা কমাতে চান। Buffered I/O স্ট্রিমগুলি সাধারণত ডেটা ব্লক আকারে মেমরিতে রাখে, যা ডিস্ক অ্যাক্সেসের সংখ্যা কমিয়ে দেয় এবং এর ফলে I/O কার্যাবলী দ্রুত হয়।

Apache Commons IO লাইব্রেরি Buffered Streams এর সাথে কাজ করতে বেশ কিছু ইউটিলিটি ক্লাস সরবরাহ করে, যা ফাইল এবং স্ট্রিমের মধ্যে দ্রুত ডেটা ট্রান্সফার করতে সহায়তা করে।

১. Buffered Streams এর ধারণা

Buffered Streams হল স্ট্রিম অপারেশনগুলির একটি বিশেষ পদ্ধতি যেখানে ডেটা ছোট আকারে নয়, বরং একটি নির্দিষ্ট সাইজের বাফারে (buffer) জমা হয় এবং তারপর একবারে ডিস্ক থেকে বা ডিস্কে লেখা হয়। এর ফলে:

  • I/O অপারেশনের সংখ্যা কমে যায়।
  • Performance বৃদ্ধি পায়, কারণ প্রতিটি ডিস্ক অ্যাক্সেসের জন্য স্ট্রিমের পুরোপুরি ব্যবহৃত হয়।
  • Memory management সঠিকভাবে করা হয়, যেখানে ডেটা একটি নির্দিষ্ট আকারে মেমরিতে রাখা হয়।

Buffered Streams এর মাধ্যমে ডেটা খোলার সময় buffered read/write অপারেশন করা যায়, যা সাধারণ স্ট্রিম অপারেশন থেকে অনেক দ্রুত। সাধারণত BufferedReader, BufferedWriter, BufferedInputStream, এবং BufferedOutputStream ক্লাসগুলো Java IO তে ব্যবহৃত হয়।

২. Buffered Streams এর সুবিধা

  • ডেটার দ্রুত প্রবাহ: Buffered Streams মেমরিতে ডেটা বাফার করে, এবং একবারে বৃহত্তর আকারে ডেটা লিখে বা পড়ে, যা পারফরম্যান্স বাড়ায়।
  • কম ডিস্ক অ্যাক্সেস: ডিস্কে পড়া বা লেখার সময় বারবার অ্যাক্সেস না করে ডেটা একটি বাফারে জমা হয় এবং তারপরে একসাথে ট্রান্সফার করা হয়।
  • রিসোর্স ব্যবহার: স্ট্রিমে ডেটা কেবল যখন প্রয়োজন হয় তখনই ডিস্ক থেকে বা ডিস্কে লেখা হয়, যা মেমরি এবং রিসোর্স ব্যবহারের দক্ষতা বাড়ায়।

৩. Buffered Streams এর ব্যবহার (Apache Commons IO)

Apache Commons IO লাইব্রেরি Buffered Streams এর ব্যবহারকে আরও সহজ এবং কার্যকরী করে তোলে, যেখানে IOUtils এবং অন্যান্য ক্লাসের মাধ্যমে আপনি এই স্ট্রিমগুলির কাজ সহজে পরিচালনা করতে পারেন।

BufferedInputStream এবং BufferedOutputStream উদাহরণ

এখানে আমরা একটি BufferedInputStream এবং BufferedOutputStream ব্যবহার করব একটি ফাইল থেকে ডেটা পড়তে এবং অন্য ফাইলে লিখতে।

import org.apache.commons.io.IOUtils;
import java.io.*;

public class BufferedStreamExample {
    public static void main(String[] args) {
        File inputFile = new File("source.txt");
        File outputFile = new File("destination.txt");

        try (BufferedInputStream inputStream = new BufferedInputStream(new FileInputStream(inputFile));
             BufferedOutputStream outputStream = new BufferedOutputStream(new FileOutputStream(outputFile))) {

            // ডেটা কপি করা: BufferedInputStream থেকে BufferedOutputStream এ
            IOUtils.copy(inputStream, outputStream);

            System.out.println("ফাইল কপি সফল!");

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

এখানে:

  • BufferedInputStream ব্যবহার করা হয়েছে ইনপুট ফাইল থেকে ডেটা পড়তে।
  • BufferedOutputStream ব্যবহার করা হয়েছে আউটপুট ফাইলে ডেটা লিখতে।
  • IOUtils.copy() মেথডটি স্ট্রিম থেকে স্ট্রিমে ডেটা কপি করে।

আউটপুট:

ফাইল কপি সফল!

BufferedReader এবং BufferedWriter উদাহরণ

BufferedReader এবং BufferedWriter পাঠ্য ফাইলের জন্য ব্যবহৃত হয়, যেখানে লাইনের আকারে ডেটা পড়া এবং লেখা হয়। এই উদাহরণে আমরা একটি টেক্সট ফাইল থেকে ডেটা পড়ব এবং অন্য ফাইলে লিখব।

import org.apache.commons.io.IOUtils;
import java.io.*;

public class BufferedReaderWriterExample {
    public static void main(String[] args) {
        File inputFile = new File("source.txt");
        File outputFile = new File("destination.txt");

        try (BufferedReader reader = new BufferedReader(new FileReader(inputFile));
             BufferedWriter writer = new BufferedWriter(new FileWriter(outputFile))) {

            // ইনপুট ফাইল থেকে লাইন পড়া এবং আউটপুট ফাইলে লেখা
            String line;
            while ((line = reader.readLine()) != null) {
                writer.write(line);
                writer.newLine(); // নতুন লাইন যুক্ত করা
            }

            System.out.println("টেক্সট কপি সফল!");

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

এখানে:

  • BufferedReader ইনপুট ফাইল থেকে লাইন বাই লাইন ডেটা পড়ছে।
  • BufferedWriter আউটপুট ফাইলে একইভাবে ডেটা লিখছে।

আউটপুট:

টেক্সট কপি সফল!

৪. Buffered Streams এর সাথে IOUtils ব্যবহার

IOUtils ক্লাস Apache Commons IO লাইব্রেরির একটি জনপ্রিয় ক্লাস যা স্ট্রিম কপি করার জন্য ব্যবহৃত হয়। IOUtils.copy() মেথডটি ফাইল বা স্ট্রিম থেকে স্ট্রিমে ডেটা কপি করতে ব্যবহৃত হয় এবং এটি Buffered Streams সহ খুব ভাল কাজ করে।

IOUtils.copy() উদাহরণ

import org.apache.commons.io.IOUtils;
import java.io.*;

public class IOUtilsBufferedExample {
    public static void main(String[] args) {
        File inputFile = new File("source.txt");
        File outputFile = new File("destination.txt");

        try (BufferedInputStream inputStream = new BufferedInputStream(new FileInputStream(inputFile));
             BufferedOutputStream outputStream = new BufferedOutputStream(new FileOutputStream(outputFile))) {

            // IOUtils.copy() ব্যবহার করে স্ট্রিম কপি করা
            IOUtils.copy(inputStream, outputStream);

            System.out.println("Buffered Stream এর মাধ্যমে ফাইল কপি সফল!");

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

এখানে:

  • IOUtils.copy() মেথডটি BufferedInputStream থেকে BufferedOutputStream এ ডেটা কপি করার জন্য ব্যবহৃত হয়েছে।

আউটপুট:

Buffered Stream এর মাধ্যমে ফাইল কপি সফল!

৫. Buffered Streams এর সুবিধা

  1. পারফরম্যান্স বৃদ্ধি: বাফারিং সিস্টেমটি ডিস্ক থেকে বা ডিস্কে ডেটা একসাথে পাঠাতে সাহায্য করে, যা I/O অপারেশনকে দ্রুত করে তোলে।
  2. কম ডিস্ক অ্যাক্সেস: বাফারিংয়ের মাধ্যমে ডেটা একসাথে পরিচালিত হয়, ফলে ডিস্কে একাধিকবার অ্যাক্সেস করার প্রয়োজন হয় না।
  3. ফাইল কপি এবং রিডিং অপারেশনের গতি বৃদ্ধি: অনেক বড় ফাইলের জন্য Buffered Streams খুব কার্যকরী, বিশেষত যখন আপনাকে অনেক পরিমাণ ডেটা একবারে পড়তে বা লিখতে হয়।
  4. কম মেমরি ব্যবহার: সাধারণ স্ট্রিমের চেয়ে বাফারিং বেশি দক্ষতার সাথে মেমরি ব্যবহার করে।

সারাংশ

Buffered Streams হল একটি কার্যকরী পদ্ধতি যা Java IO এবং Apache Commons IO লাইব্রেরির মাধ্যমে I/O অপারেশনগুলিকে দ্রুত এবং কার্যকরী করে তোলে। BufferedInputStream, BufferedOutputStream, BufferedReader, এবং BufferedWriter ক্লাসগুলি স্ট্রিম থেকে বা স্ট্রিমে ডেটা পাঠানোর সময় পারফরম্যান্স উন্নত করতে সাহায্য করে। Apache Commons IO লাইব্রেরি IOUtils.copy() মেথডের মাধ্যমে স্ট্রিম কপি করার প্রক্রিয়াকে আরও সহজ করে তোলে।

common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion